﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//----Añado librerías necesarias
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Configuration;
using System.Collections;

namespace Librerias
{
   
        #region excepciones
        //Excepciones CADCursar

        public class Excepcion_HoraRepetidaMismoDia : Exception { public override string ToString() { return "El profesor ya tiene asignado un turno a la misma hora ese dia"; } }

        #endregion

    /// <summary>
    /// Clase: CAD Turno
    /// </summary>
    public class CADTurno
    {
        SqlConnection c;
        CADGestionDropbox drop;
        #region interfaz

        #region CADTurno
        /// <summary>
        /// Constructor por defecto
        /// </summary>
        public CADTurno()
        {
        }
        #endregion

        #region AltaTurno
        /// <summary>
        /// Persiste un turno
        /// </summary>
        /// <param name="Turno">EN Turno</param>
        public void AltaTurno(ENTurno Turno)
        {
            int res = 0;
            c = new SqlConnection(CADConexion.connString);
            try
            {
                /*
                if (EsYaAsignadoTurno(Turno.Correo, Turno.Dia, Turno.H_ini, Turno.H_fin) == true)
                {
                    throw new Excepcion_HoraRepetidaMismoDia();
                }
                else
                {
                */
                    c.Open();
                    SqlCommand com = new SqlCommand("insert into turno (turCorreo,turCodigo, turTipo, turAula, turDia, turH_ini, turH_fin) values('" +
                                                    Turno.Correo + "','" +
                                                    Turno.Codigo + "','" +
                                                    Turno.Tipo + "','" +
                                                    Turno.Dia + "','" +
                                                    Turno.H_ini + "','" +
                                                    Turno.H_fin + "');", c);
                    res = com.ExecuteNonQuery();
                //}
            }
            catch (Exception ex)
            {
                throw new System.Exception("Error al insertar en la tabla 'cursar'\n" + ex.Message);
            }
            finally
            {
                c.Close();
                c.Dispose();
            }
        }

        #endregion
        
        #region BorraCursar
        /// <summary>
        /// Borra una Turno de la BD
        /// </summary>
        /// <param name="Turno">EN Turno</param>
        public void BorraTurno(ENTurno Turno)
        {
            int res = 0;
            SqlConnection c = new SqlConnection(CADConexion.connString);
            try
            {
                c.Open();
                SqlCommand com = new SqlCommand("delete from turno where(turCorreo= '" + Turno.Correo +
                                                "'and turCodigo= '" + Turno.Codigo +
                                                "'and turTipo= '" + Turno.Tipo +
                                                "'and turAula= '" + Turno.Aula +
                                                "'and turDia= '" + Turno.Dia +
                                                "'and turH_ini= '" + Turno.H_ini +
                                                "'and turH_fin= '" + Turno.H_fin + "')", c);
                res = com.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new System.Exception("Error al eliminar en la tabla " + ex.Message);
            }
            finally
            {

                c.Close();
            }
        }

        #endregion
        #region EsYaAsignadoTurno
        ////Acesso conectado////
        public bool EsYaAsignadoTurno(string ProfesorAComprobar, int DiaAComprobar, DateTime H_iniAComprobar, DateTime H_finAComprobar)
        {
            bool salida = false;                                //devuelve si lo es o no
            SqlConnection c = null;                             // Variable de conexión a la DB
            SqlCommand command = null;                          // Variable para la ejecución de comandos
            SqlDataReader reader = null;                        // Almacenador de datos obtenidos
            string query = string.Empty;                        // Instrucción a ejecutar
            List<string> listado = new List<string>();          // Listado de correos capturados

            query = "select turCorreo from turno where (turCorreo='" + ProfesorAComprobar +
                                                        "and turDia='" + DiaAComprobar +
                                                        "and turH_ini='" + H_iniAComprobar +
                                                        "and turH_fin='" + H_finAComprobar + "');";
            try
            {
                // Establecimiento de conexión
                c = new SqlConnection(CADConexion.connString);
                c.Open();

                // Ejecución de la instrucción
                command = new SqlCommand(query, c);
                reader = command.ExecuteReader();

                // Recorrido de los datos obtenidos
                while (reader.Read())
                {
                    string clavecita;

                    clavecita = reader["turCorreo"].ToString();

                    listado.Add(clavecita);
                }

                if (listado.Capacity != 0)
                    //el alumno ya estará cursando la asignatura
                    //si lo encuentra
                    salida = true;
                else
                    //el alumno no estará cursando la asignatura -> podemos insertar
                    salida = false;

            }
            catch (Exception)
            {
                throw;
            }

            finally
            {
                // Comprobación de conexión abierta
                if ((c != null) && (c.State == ConnectionState.Open))
                {
                    c.Close();
                }
            }

            return salida;
        }
        #endregion
        #region Consultatipo
        public ArrayList ConsultarTurno(string CodigoAsig)
        {
            ArrayList res = null;
            SqlConnection c = new SqlConnection(CADConexion.connString);

            try
            {
                c = new SqlConnection(CADConexion.connString);
                c.Open();
                string select = "SELECT DISTINCT t.turCorreo, t.turCodigo, t.turTipo, t.turAula, t.turDia, t.turH_ini, t.turH_fin " +
                                " FROM            turno t" +
                                " where turCodigo='" + CodigoAsig.Trim() +"';";



                SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, c);

                DataTable tabla = new DataTable();
                adaptadorSQL.Fill(tabla);

                res = new ArrayList();
                for (int i = 0; i < tabla.Rows.Count; i++)
                {
                    
                    res.Add(new ENTurno(tabla.Rows[i][0].ToString(),
                                             tabla.Rows[i][1].ToString(),
                                             tabla.Rows[i][2].ToString(),
                                             int.Parse(tabla.Rows[i][3].ToString()),
                                             int.Parse(tabla.Rows[i][4].ToString()),
                                             (DateTime)tabla.Rows[i][5],
                                             (DateTime)tabla.Rows[i][6]));
                                             
                }

            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                c.Close();
            }

            return res;
        }
        #endregion
        #region ConsultarTurnosProfesor
        public DataTable ConsultaTurnosProfesor(string correoProfesor)
        {
            SqlConnection c = new SqlConnection(CADConexion.connString);
            c.Open();
            string select = "SELECT  DISTINCT    turCodigo, asiNombre, turTipo, turAula, turDia, turH_ini, turH_fin " +
                             "FROM         turno,usuario,asignatura " +
                             "where        usuario.usuCorreo = '" + correoProfesor +
                             "' and  turno.turCorreo = '" + correoProfesor +
                             "' and turno.turCodigo = asignatura.asiCodigo";

            SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, c);

            DataTable tabla = new DataTable();
            adaptadorSQL.Fill(tabla);
            return tabla;
        }
        #endregion


        #region ConsultaTurnosyProfesorPorAsignatura
        public DataTable ConsultaTurnosyProfesorPorAsignatura(String asignatura)
        {
            SqlConnection c = new SqlConnection(CADConexion.connString);
            c.Open();
            string select = "SELECT  DISTINCT    turCodigo, u.usuNombre, u.usuApellido1, u.usuApellido2, u.usuCorreo,  turTipo, turAula, turDia, turH_ini, turH_fin " +
                             "FROM         turno,usuario u,asignatura a " +
                             "where       a.asiCodigo = '" + asignatura +
                             "' and turno.turCodigo = a.asiCodigo" +
                             " and u.usuTipo = '1' order by usuCorreo,turTipo";

            SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, c);

            DataTable tabla = new DataTable();
            adaptadorSQL.Fill(tabla);
            return tabla;
        }

        public DataTable ConsultaTurnos(String asig)
        {
            SqlConnection c = new SqlConnection(CADConexion.connString);
            c.Open();
            string select = "SELECT  DISTINCT    turCodigo,  turTipo, turAula, turDia, turH_ini, turH_fin " +
                             "FROM         turno "+
                             "where       turCodigo = '" + asig + "'";

            SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, c);

            DataTable tabla = new DataTable();
            adaptadorSQL.Fill(tabla);
            return tabla;
        }

        public DataTable GetAsignaturasProfesor(string profe)
        {
            DataTable res = null;
            SqlConnection c = new SqlConnection(CADConexion.connString);
            try
            {
                c.Open();
                string select = "select distinct turCodigo from turno where turCorreo= '" + profe + "'";
                SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, c);
                res = new DataTable();
                adaptadorSQL.Fill(res);
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                c.Close();
            }

            return res;

        }
        #endregion
    }
        #endregion
}
        